package com.java.nio;

import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @author jl
 * Created on 2020/9/27
 * MappedByteBuffer可以直接在内存(堆外内存)修改文件,操作系统不需要拷贝文件
 */
public class MappedByteBufferTest {

    public static void main(String[] args) throws Exception{
        RandomAccessFile randomAccessFile = new RandomAccessFile("1.txt", "rw");
        FileChannel channel = randomAccessFile.getChannel();

        /**
         * 参数1:FileChannel.MapMode.READ_WRITE 使用的读写模式
         * 参数2:可以直接修改的起始位置
         * 参数3:映射到内存的大小(不是索引位置)
         */
        // MappedByteBuffer实际类型是DirectByteBuffer
        MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);
        map.put(0,(byte)'H');
        map.put(1,(byte)'E');
//        map.put(5,(byte)'W'); // 抛异常

        randomAccessFile.close();

    }
}
